package bsea.jun24;

/**
 * 类修饰符：

public（访问控制符），将一个类声明为公共类，他可以被任何对象访问，一个程序的主类必须是公共类。

abstract，将一个类声明为抽象类，没有实现的方法，需要子类提供方法实现。

final，将一个类生命为最终（即非继承类），表示他不能被其他类继承。

friendly，默认的修饰符，只有在相同包中的对象才能使用这样的类。
 * @author zizaitianyuan
 *
 */
 public class Teacher {
	
	 
	 /**
	  * 
	  * 成员变量修饰符：

public（公共访问控制符），指定该变量为公共的，他可以被任何对象的方法访问。

private（私有访问控制符）指定该变量只允许自己的类的方法访问，其他任何类（包括子类）中的方法均不能访问。

protected（保护访问控制符）指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量。

friendly ，在同一个包中的类可以访问，其他包中的类不能访问。

final，最终修饰符，指定此变量的值不能变。

static（静态修饰符）指定变量被所有对象共享，即所有实例都可以使用该变量。变量属于这个类。

transient（过度修饰符）指定该变量是系统保留，暂无特别作用的临时性变量。

volatile（易失修饰符）指定该变量可以同时被几个线程控制和修改。
	  */
	private String name;
	private int id;
	private int age;
	
	
	
	
	
	/**
	 * 
	 * 方法修饰符：

public（公共控制符）

private（私有控制符）指定此方法只能有自己类等方法访问，其他的类不能访问（包括子类）

protected（保护访问控制符）指定该方法可以被它的类和子类进行访问。
friendly，默认的修饰符，只有在相同包中的对象才能使用这样的类。

final，指定该方法不能被重载。

static，指定不需要实例化就可以激活的一个方法。

synchronize，同步修饰符，在多个线程中，该修饰符用于在运行前，对他所属的方法加锁，以防止其他线程的访问，运行结束后解锁。

native，本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的。
	 * 
	 * @return
	 */
	 String getName() {
		return name;
	}
	protected void setName(String name) {
		this.name = name;
	}
	private int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	protected int getAge() {
		return age;
	}
	protected void setAge(int age) {
		this.age = age;
	}
	
	
	//两个对象，equals返回true, 那么hashcode一定相同。
	//两个对象的hashcode相同，equals不一定返回true
	
	
	public boolean equals(Object s){
		  System.out.println(s.getClass().getName());
		 if(s.getClass().getName()=="bsea.jun24.Teacher"){
			 
			 if(this.id==((Teacher) s).getId()){
				 return true;
			 }else{
				 
				 return false;
			 }
			 
		 }else{
			 
			 return false;
		 }
	}
	
	public int hashCode(){
		
		return this.getId();
	}
	
	
	
	

}
